/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.mindbox.mueblesalpes.presentacion.producto;

import com.mindbox.mueblesalpes.negocio.entity.Color;
import com.mindbox.mueblesalpes.negocio.entity.Dimension;
import com.mindbox.mueblesalpes.negocio.entity.Mueble;
import com.mindbox.mueblesalpes.negocio.entity.TipoMueble;
import com.mindbox.mueblesalpes.negocio.producto.IProductoService;
import com.mindbox.mueblesalpes.presentacion.utils.Mensajes;
import com.mindbox.mueblesalpes.presentacion.utils.UtilidadesImages;
import java.util.ArrayList;
import java.util.List;
import javax.ejb.EJB;
import javax.faces.context.FacesContext;
import javax.faces.model.SelectItem;
import org.richfaces.model.UploadItem;

/**
 * Backing Bean asociado a insert.xhtml
 * @author Catalina
 */
public class ProductoBean {

    private static String LIST = "list";
    private String referencia;
    private String nombre;
    private String descripcion;
    private String tipo;
    private String material;
    private Double alto;
    private Double ancho;
    private Double profundidad;
    private String color;
    private Double peso;
    private List<UploadItem> foto;
    private UploadItem fotoMueble;
    private List<SelectItem> colorItems = new ArrayList<SelectItem>();
    @EJB
    private IProductoService productoService;

    /** Creates a new instance of ProductoBean */
    public ProductoBean() {
        foto = new ArrayList<UploadItem>();
        cargarColores();
    }

    /**
     * Método que permite insertar un producto en el sistema
     * @return Regla de navegación
     */
    public String insertarProducto() {

        try {
            Mueble mueble = new Mueble();
            Dimension dimension = new Dimension();
            mueble.setReferencia(getReferencia());
            mueble.setNombre(getNombre());
            mueble.setDescripcion(getDescripcion());

            if (getTipo().equals(TipoMueble.EXTERIOR.toString())) {
                mueble.setTipoMueble(TipoMueble.EXTERIOR);
            } else {
                mueble.setTipoMueble(TipoMueble.INTERIOR);
            }

            mueble.setMaterial(getMaterial());

            dimension.setAlto(getAlto());
            dimension.setAncho(getAncho());
            dimension.setProfundidad(getProfundidad());
            mueble.setDimension(dimension);
            mueble.setColor(obtenerColor(getColor()));
            mueble.setPeso(getPeso());

            if (foto.size() != 0) {
                setFotoMueble(getFoto().iterator().next());
                mueble.setFoto(getReferencia());
                mueble.setBytesFoto(getFotoMueble().getData());
                productoService.insertarProducto(mueble);
                limpiarPantalla();
                List<Mueble> muebles = new ArrayList<Mueble>();
                muebles.add(mueble);
                UtilidadesImages.agregarFotos(FacesContext.getCurrentInstance(), UtilidadesImages.getBeanImageFromMuebles(muebles));
                Mensajes.asignarMensajeInfo("insert.exitoso");
            } else {
                Mensajes.asignarMensajeError("Debe agregar una imagen del mueble");
            }
        } catch (Exception e) {
            Mensajes.asignarMensajeError("insert.error");
        }

        return getLIST();
    }

    /**
     * Método que permite obtener a partir de una cadena, el Color (ENUM)
     * @param color
     * @return Color
     */
    private Color obtenerColor(String color) {
        if (color.equals(Color.AMARILLO.toString())) {
            return Color.AMARILLO;
        } else if (color.equals(Color.AVELLANA.toString())) {
            return Color.AVELLANA;
        } else if (color.equals(Color.AZUL.toString())) {
            return Color.AZUL;
        } else if (color.equals(Color.CAOBA.toString())) {
            return Color.CAOBA;
        } else if (color.equals(Color.MADERA.toString())) {
            return Color.MADERA;
        } else if (color.equals(Color.NARANJA.toString())) {
            return Color.NARANJA;
        } else if (color.equals(Color.NATURAL.toString())) {
            return Color.NATURAL;
        } else if (color.equals(Color.ROJO.toString())) {
            return Color.ROJO;
        } else if (color.equals(Color.WENGUE.toString())) {
            return Color.WENGUE;
        }
        return Color.NATURAL;
    }

    /**
     * Carga en un selectItems los colores disponibles
     */
    private void cargarColores() {
        SelectItem item1 = new SelectItem(Color.AMARILLO);
        SelectItem item2 = new SelectItem(Color.AVELLANA);
        SelectItem item3 = new SelectItem(Color.AZUL);
        SelectItem item4 = new SelectItem(Color.CAOBA);
        SelectItem item5 = new SelectItem(Color.MADERA);
        SelectItem item6 = new SelectItem(Color.MADERA);
        SelectItem item7 = new SelectItem(Color.NARANJA);
        SelectItem item8 = new SelectItem(Color.NATURAL);
        SelectItem item9 = new SelectItem(Color.ROJO);
        SelectItem item10 = new SelectItem(Color.WENGUE);

        getColorItems().add(item1);
        getColorItems().add(item2);
        getColorItems().add(item3);
        getColorItems().add(item4);
        getColorItems().add(item5);
        getColorItems().add(item6);
        getColorItems().add(item7);
        getColorItems().add(item8);
        getColorItems().add(item9);
        getColorItems().add(item10);
    }

    /**
     * Método que permite inicializar los datos de una pantalla
     */
    private void limpiarPantalla() {
        setReferencia("");
        setNombre("");
        setDescripcion("");
        setTipo("");
        setMaterial("");
        setAlto(0.0);
        setAncho(0.0);
        setProfundidad(0.0);
        setColor("");
        setPeso(0.0);
        setFoto(new ArrayList<UploadItem>());
    }

    /**
     * @return the referencia
     */
    public String getReferencia() {
        return referencia;
    }

    /**
     * @param referencia the referencia to set
     */
    public void setReferencia(String referencia) {
        this.referencia = referencia;
    }

    /**
     * @return the nombre
     */
    public String getNombre() {
        return nombre;
    }

    /**
     * @param nombre the nombre to set
     */
    public void setNombre(String nombre) {
        this.nombre = nombre;
    }

    /**
     * @return the descripcion
     */
    public String getDescripcion() {
        return descripcion;
    }

    /**
     * @param descripcion the descripcion to set
     */
    public void setDescripcion(String descripcion) {
        this.descripcion = descripcion;
    }

    /**
     * @return the tipo
     */
    public String getTipo() {
        return tipo;
    }

    /**
     * @param tipo the tipo to set
     */
    public void setTipo(String tipo) {
        this.tipo = tipo;
    }

    /**
     * @return the material
     */
    public String getMaterial() {
        return material;
    }

    /**
     * @param material the material to set
     */
    public void setMaterial(String material) {
        this.material = material;
    }

    /**
     * @return the alto
     */
    public Double getAlto() {
        return alto;
    }

    /**
     * @param alto the alto to set
     */
    public void setAlto(Double alto) {
        this.alto = alto;
    }

    /**
     * @return the ancho
     */
    public Double getAncho() {
        return ancho;
    }

    /**
     * @param ancho the ancho to set
     */
    public void setAncho(Double ancho) {
        this.ancho = ancho;
    }

    /**
     * @return the profundidad
     */
    public Double getProfundidad() {
        return profundidad;
    }

    /**
     * @param profundidad the profundidad to set
     */
    public void setProfundidad(Double profundidad) {
        this.profundidad = profundidad;
    }

    /**
     * @return the color
     */
    public String getColor() {
        return color;
    }

    /**
     * @param color the color to set
     */
    public void setColor(String color) {
        this.color = color;
    }

    /**
     * @return the peso
     */
    public Double getPeso() {
        return peso;
    }

    /**
     * @param peso the peso to set
     */
    public void setPeso(Double peso) {
        this.peso = peso;
    }

    /**
     * @return the foto
     */
    public List<UploadItem> getFoto() {
        return foto;
    }

    /**
     * @param foto the foto to set
     */
    public void setFoto(List<UploadItem> foto) {
        this.foto = foto;
    }

    /**
     * @return the fotoMueble
     */
    public UploadItem getFotoMueble() {
        return fotoMueble;
    }

    /**
     * @param fotoMueble the fotoMueble to set
     */
    public void setFotoMueble(UploadItem fotoMueble) {
        this.fotoMueble = fotoMueble;
    }

    /**
     * @return the colorItems
     */
    public List<SelectItem> getColorItems() {
        return colorItems;
    }

    /**
     * @param colorItems the colorItems to set
     */
    public void setColorItems(List<SelectItem> colorItems) {
        this.colorItems = colorItems;
    }

    /**
     * @return the productoService
     */
    public IProductoService getProductoService() {
        return productoService;
    }

    /**
     * @param productoService the productoService to set
     */
    public void setProductoService(IProductoService productoService) {
        this.productoService = productoService;
    }

    /**
     * @return the LIST
     */
    public static String getLIST() {
        return LIST;
    }

    /**
     * @param aLIST the LIST to set
     */
    public static void setLIST(String aLIST) {
        LIST = aLIST;
    }
}
